home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-07-16 | 5.7 KB | 236 lines | [TEXT/CWIE] |
- // ===========================================================================
- // CNode.h ©1995-97 Timo Eloranta All rights reserved.
- // ===========================================================================
- // A simple node class.
-
- #pragma once
-
- #include <PP_Types.h>
- #include <iterator.h> // MSL
-
- class CNode
- {
- private:
- short mNodeNbr; // Number of the node
-
- short mPosX; // Position in the grid: X
- short mPosY; // Position in the grid: Y
-
- Boolean mHasMoved; // Has this node moved?
-
- public:
- CNode();
-
- void Set( short, short, short );
-
- void SetNodePos( short inX,
- short inY );
-
- CNode &operator=( const CNode & inNode );
-
- Int16 GetNodeNbr() const;
- void GetNodeNbr( short & outNbr) const;
-
- Boolean HasPosition( const Int16 inX,
- const Int16 inY ) const;
-
- void GetNodePos( short & x,
- short & y ) const;
-
- void GetNodePos( Point & outPos ) const;
-
- void Draw( const Rect & inOneOneRect,
- Int16 inSquareSize ) const;
-
- Int16 DistanceTo( const CNode & inNode ) const;
-
- Boolean GetHasMoved() const;
- void ResetHasMoved();
- };
-
- typedef CNode* CNodePtr;
-
- // ===========================================================================
- // • Inline Functions
- // ===========================================================================
-
- // ———————————————————————————————————————————————————————————————————————————
- // • Set
- //
- // Called by: CNode::CNode
- // CNode::operator=
- // CGraphNodes::ClearAll
- // CGraphNodes::SetNode
- // ———————————————————————————————————————————————————————————————————————————
-
- inline void
- CNode::Set( short inNbr, short inX, short inY )
- {
- mNodeNbr = inNbr;
-
- mPosX = inX;
- mPosY = inY;
-
- mHasMoved = true;
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • SetNodePos
- //
- // Called by: CGraphNodes::SetNodePos
- // CGraphNodes::SwapRows
- // CGraphNodes::SwapCols
- // CGraphNodes::SwapInRowOrCol
- // CGraphNodes::LargeContMutate
- // CGraphNodes::InvertPartRow
- // CGraphNodes::InvertPartCol
- // ———————————————————————————————————————————————————————————————————————————
- // Set new coordinates to this node and mark it as a mover.
-
- inline void
- CNode::SetNodePos( short inX, short inY )
- {
- mPosX = inX;
- mPosY = inY;
-
- mHasMoved = true;
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • CNode
- //
- // Called by: CGraphNodes::Initialize
- // ———————————————————————————————————————————————————————————————————————————
-
- inline
- CNode::CNode()
- {
- Set( 0, 0, 0 );
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • operator=
- //
- // Called by: ?::? (I'm sure this is used _somewhere_ ...)
- // ———————————————————————————————————————————————————————————————————————————
-
- inline CNode &
- CNode::operator=( const CNode & inNode )
- {
- Set( inNode.mNodeNbr,
- inNode.mPosX,
- inNode.mPosY );
-
- return *this;
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • GetNodeNbr
- //
- // Called by: CGraphDrawing::ThreeNodeCrossover
- // CGraphNodes::TinyMoveEdge
- // CGraphNodes::MoveEdge
- // CGraphNodes::Move3ConnectedNodes
- // CGraphNodes::RectCrossover
- // ———————————————————————————————————————————————————————————————————————————
-
- inline short
- CNode::GetNodeNbr( void ) const
- {
- return mNodeNbr;
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • GetNodeNbr
- //
- // Called by: CEdge::GetNodeNumbers
- // CGraphNodes::SmallMutate
- // ———————————————————————————————————————————————————————————————————————————
-
- inline void
- CNode::GetNodeNbr( short & nbr) const
- {
- nbr = mNodeNbr;
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • HasPosition
- //
- // Called by: CGraphNodes::NodeInSquare
- // ———————————————————————————————————————————————————————————————————————————
- // Returns true, if this node is in location (inX,inY).
-
- inline Boolean
- CNode::HasPosition( const Int16 inX, const Int16 inY ) const
- {
- return ( mPosX == inX &&
- mPosY == inY );
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • GetNodePos
- //
- // Called by: CEdge::Intersects
- // CEdge::Draw
- // CEdge::SetLength
- // CGraphDrawing::ThreeNodeCrossover
- // CGraphNodes::TinyMutate
- // CGraphNodes::TinyMoveEdge etc.
- // ———————————————————————————————————————————————————————————————————————————
-
- inline void
- CNode::GetNodePos( Point & outPos) const
- {
- outPos.h = mPosX;
- outPos.v = mPosY;
- }
-
- inline void
- CNode::GetNodePos( short & outX, short & outY ) const
- {
- outX = mPosX;
- outY = mPosY;
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • DistanceTo
- //
- // Called by: CGraphNodes::BruteForceClosestPairs
- // ———————————————————————————————————————————————————————————————————————————
- // Square of distance from this node to inNode.
- // Squares are used since taking square roots would be too slow.
-
- inline Int16
- CNode::DistanceTo( const CNode & inNode) const
- {
- Int16 theDiffX = mPosX - inNode.mPosX;
- Int16 theDiffY = mPosY - inNode.mPosY;
-
- return ( ( theDiffX * theDiffX ) +
- ( theDiffY * theDiffY ) );
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • GetHasMoved
- //
- // Called by: CEdge::HasMoved
- // ———————————————————————————————————————————————————————————————————————————
-
- inline Boolean
- CNode::GetHasMoved() const
- {
- return mHasMoved;
- }
-
- // ———————————————————————————————————————————————————————————————————————————
- // • ResetHasMoved
- //
- // Called by: CGraphNodes::ResetAll
- // ———————————————————————————————————————————————————————————————————————————
-
- inline void
- CNode::ResetHasMoved()
- {
- mHasMoved = false;
- }
-